/*
Radio.java
Raul Rivera 10099
Descripcion: Esta es la clase que crea un radio con todos sus atributos 
*/


import java.util.InputMismatchException;
import java.text.DecimalFormat; // importamos esto para poder colocar la estacion actual del radio y concatenarlo a un string

/**
 * 
 * @author Raul Antonio
 */
public class Radio implements NuestraInterfaz{ //esta clase implementa la interfaz creada en comun la cual es una serie de metodos vacios y en esta la llenamos

	//Atributos
	private boolean power; 
	private double estacionfm = 87.9;
	private double	estacionam = 530.0;
	private double estacion = 530.0; 
	private double [] memoria = new double[12];
	private boolean frecuenciafm;
        DecimalFormat decimal = new DecimalFormat("0.##");
	
	//El metodo constructor el cual no inicializamos nada
        /**
         * 
         */
        public Radio(){
            power = false;
            frecuenciafm = false; 
	}
	
	//Metodos 
	
        /**
         * 
         * @return
         */
        public  boolean power(){
		if(power == true) // este metodo revisa que si el radio esta encendido entonces lo apaga este represente el boto I/O del radio
			power = false;
			
		else
			power = true; // esta condicion dice que si esta encendido el radio lo apaga y si esta apagado lo enciende 
                
                return power; //este metodo retorna true or false dependiendo del estado del radio
	}
			
		
	
        /**
         * 
         * @return
         */
        public boolean cambio(){ //este metodo cambian de frecuencia si esta en am cambia a fm  y viceversa 
                int contador = 0; // se crea un contador ya que si solo se revisa la variable frecuenciafm solo lo cambia una vez y luego permanece igual
		if(frecuenciafm == true){
			frecuenciafm = false; 
			estacion = estacionam;
                        contador ++;    //si estamos en fm cambia a am y tambien cambia la estacion y se incrementa el contador 
                }
                if(frecuenciafm == false && contador == 0){ // se entra a este if solamente si esta en am y el contador es cero
			frecuenciafm= true;
			estacion = estacionfm; // secambia de frecuencia am a frecuencia fm al igual que la estacion cambia
                }
                contador = 0 ; 
                return frecuenciafm; // se retorna el valor booleano si esta en fm o am el radio
	}
			
        /**
         * 
         */
        public void fw() { //este metodo va cambiando de estacion ascendentemente dependiendo de la frecuencia
	
		if(frecuenciafm == false){
			estacionam +=10.0; // si la frecuencia es am se incrementara en 10 y la estacion actual sera en am tambien
                        estacion = estacionam;
			if(estacionam > 1610.0){
				estacionam = 530.0; // una vez se llegue a la estacion mas grande se comienza de nuevo 
                                estacion = estacionam; 
                        }
                                
		}
			
		if(frecuenciafm == true){
			estacionfm += 0.2; // si la frecuencia es fm se incrementa en 0.2 y se coloca la estacion actual del radio en fm
                        estacion = estacionfm; 
			if(estacionfm > 107.9){
				estacionfm = 87.9; // si la estacion llega a ser la maxima se vuelve a inicializar 
                                estacion = estacionfm ; 
                        }
		}
	}
	
        /**
         * 
         */
        public void bw() {
	
		if(frecuenciafm == false){ // aqui se va de retroceso en modo descendente en las estaciones 
			estacionam -=10.0; // si la frecuencia es am se disminuye a razon de 10
                        estacion = estacionam;
			if(estacionam < 530.0){
				estacionam = 1610.0; // si se llega a su minimo vuelve a dar la vuelta y comienza de nuevo el la estacion mas grande
                                estacion = estacionam; 
                        }
                                
		}
			
		if(frecuenciafm == true){ // este revisa si la frecuencia es fm
			estacionfm -= 0.2;  // si la frecuencia es fm decrementa en 0.2 
                        estacion = estacionfm; 
			if(estacionfm < 87.9){ // revisa si la estacion no ha llegado a la menor y si llega vuelve a comenzar en el mayor 
				estacionfm = 107.9; 
                                estacion = estacionfm ; 
                        }
		}
	}
		
        /**
         * 
         * @param boton
         */
        public void store(int boton){   // guardar la estacion en el boton
		if(frecuenciafm == true)
			memoria[boton] = estacionfm; //guarda en la posicion elegida la estacion que poseemos en fm 
		else
			memoria[boton] = estacionam;// guarda en la posicion que escogimos la estacion en am
		
	}
	
        /**
         * 
         * @param boton
         */
        public void select(int boton){  // este metodo pone la estacion guardada en una posicion
            boolean comparacion = true; 
            double  estacionSelect = memoria[boton];
            if(estacionSelect == 0){ //revisa si la casilla de memoria esta vacia
                System.out.println("La memoria esta vacia");
            }
            if(estacionSelect <= 1610.0 && estacionSelect >= 530.0){
                frecuenciafm = false;
                estacion = memoria[boton]; // revisa si la estacion guardada en la matriz es am o fm y la coloca en la variable estacion
            }
            if(estacionSelect <=107.9 && estacionSelect >= 87.9){
                frecuenciafm = true;
                estacion = memoria[boton]; // revisa si la estacion guardada es fm y si es la guarda en la variable estacion para luego mostrarla
            }
            
            
	}
			
		
        /**
         * 
         */
        public void salir() { // este metodo solamete es utilizado para salir del programa
	}
	
	public String toString() { // este metodo concatena todo  muestra un estado del radio
		String descripcion; 
                descripcion = "El radio esta apagado o prendido?" + power + "\n"; //muestra si el radio esta prendido o apagado
                if (frecuenciafm == true){
                    descripcion += "El tipo de frecuencia que esta escuchando es: FM" + "\n";
                }
                if (frecuenciafm == false){
                    descripcion += "El tipo de frecuencia que esta escuchando es: AM" + "\n";  // muestra en que frecuencia nos encontramos
                }
                descripcion += "La estacion actual es:" + decimal.format(estacion) + "\n";  // muestra en que estacion estamos actualmente
                /*descripcion = estacion; era lo que estaba antes */
		return descripcion;
	}
	
	
}	